#include "/home/hd/linux/logs/mylog/mylog.h"
#include <unistd.h>

void test_log(const string& name)
{
    INFO("%s","测试开始");
    mylog::Logger::ptr logger = mylog::LoggerManager::getInstance().getLogger(name);
    logger->debug("%s","测试日志");
    logger->info("%s","测试日志");
    logger->warn("%s","测试日志");
    logger->error("%s","测试日志");
    logger->fatal("%s","测试日志");
    INFO("%s","测试完毕");
   
}

int main()
{
    std::unique_ptr<mylog::LoggerBuilder> builder(new mylog::GlobalLoggerBuilder());
    builder->buildLoggerName("sync_logger");
    builder->buildLoggerLevel(mylog::LogLevel::value::DEBUG);
    builder->buildFormatter("[%c][%f:%l][%p]%m%n");
    builder->buildLoggerType(mylog::LoggerType::LOGGER_SYNC);
    builder->buildSink<mylog::FileSink>("./logfile/sync.log");
    builder->buildSink<mylog::StdoutSink>();
    builder->buildSink<mylog::RollBySizeSink>("./logfile/roll_sync-by-size.log",1024 * 1024);
    builder->build();
    test_log("sync_logger");

    return 0;
}


// void test_log()
// {
//     // mylog::Logger::ptr logger = mylog::LoggerManager::getInstance().getLogger("async_logger");
//     // logger->debug("%s","测试日志");
//     // logger->info("%s","测试日志");
//     // logger->warn("%s","测试日志");
//     // logger->error("%s","测试日志");
//     // logger->fatal("%s","测试日志");
//     // size_t count = 0;
//     // while(count < 500000)
//     // {
//     //     logger->fatal("测试日志-%d",count++);
//     // }
    
//     DEBUG("%s","测试日志");
//     INFO("%s","测试日志");
//     WARN("%s","测试日志");
//     ERROR("%s","测试日志");
//     FATAL("%s","测试日志");
//     size_t count = 0;
//     while(count < 500000)
//     {
//         FATAL("测试日志-%d",count++);
//     }
// }

// int main()
// {
//     //读取文件数据，一点一点写入缓冲区，最终将缓冲区数据写入文件，判断生产的新文件与源文件是否一致
//     // std::ifstream ifs("./logfile/test.log",std::ios::binary);
//     // if(ifs.is_open() == false) { cout<<"open fail\n";return -1;}
//     // ifs.seekg(0,std::ios::end);
//     // size_t fsize = ifs.tellg();
//     // ifs.seekg(0,std::ios::beg);
//     // string body;
//     // body.resize(fsize);
//     // ifs.read(&body[0],fsize);
//     // if(ifs.good() == false) {cout<<"read error\n"; return -1;}
//     // ifs.close();

//     // cout<<fsize<<endl;
//     // mylog::Buffer buffer;
//     // for(int i=0;i<body.size();i++)
//     // {
//     //     buffer.push(&body[i],1);
//     // }
//     // cout<<buffer.readAbleSize()<<endl;

//     // std::ofstream ofs("./logfile/tmp.log",std::ios::binary);
//     // //ofs.write(buffer.begin(),buffer.readAbleSize());
//     // size_t rsize = buffer.readAbleSize();
//     // for(int i=0;i<rsize;i++)
//     // { 
//     //     ofs.write(buffer.begin(),1);
//     //     if(ofs.good() == false) {cout<<"write error\n"; return -1;}
//     //     buffer.moveReader(1);
//     // }
//     // ofs.close();
    
// //     string logger_name = "sys_logger";
// //     mylog::LogLevel::value limit =  mylog::LogLevel::value::WARN;
// //     mylog::Formatter::ptr fmt(new mylog::Formatter("[%d{%H:%M:%S}][%c][%f:%l][%p]%T%m%n"));
// //     mylog::LogSink::ptr stdout_lsp = mylog::SinkFactory::create<mylog::StdoutSink>();
// //     mylog::LogSink::ptr file_lsp = mylog::SinkFactory::create<mylog::FileSink>("./logfile/test.log");
// //     mylog::LogSink::ptr roll_lsp = mylog::SinkFactory::create<mylog::RollBySizeSink>("./logfile/roll-",1024*1024);
// //     std::vector<mylog::LogSink::ptr> sinks = {stdout_lsp, file_lsp, roll_lsp};
// //     mylog::Logger::ptr logger(new mylog::SynLogger(logger_name,limit,fmt,sinks));

//     std::unique_ptr<mylog::LoggerBuilder> builder(new mylog::GlobalLoggerBuilder());
//     builder->buildLoggerName("async_logger");
//     builder->buildLoggerLevel(mylog::LogLevel::value::WARN);
//     builder->buildFormatter("[%c][%f:%l]%m%n");
//     builder->buildEnableUnSafeAsync();
//     builder->buildLoggerType(mylog::LoggerType::LOGGER_ASYNC);
//     builder->buildSink<mylog::FileSink>("./logfile/async.log");
//     builder->buildSink<mylog::StdoutSink>();
//     builder->build();

//     test_log();

//     // mylog::LogMsg msg(mylog::LogLevel::value::INFO,53,"main.c","root","格式化功能测试 ...");
//     // mylog::Formatter fmt;
//     // string str = fmt.format(msg);
//     // mylog::LogSink::ptr time_lsp = mylog::SinkFactory::create<RollByTimeSink>("./logfile/roll-",TimeGap::GAP_SECOND);
//     // time_t old = mylog::util::Date::now();
//     // while(mylog::util::Date::now() < old + 5)
//     // {
//     //     time_lsp->log(str.c_str(),str.size());
//     // }

//     // mylog::LogMsg msg(mylog::LogLevel::value::INFO,53,"main.c","root","格式化功能测试 ...");
//     // mylog::Formatter fmt;
//     // string str = fmt.format(msg);
//     // mylog::LogSink::ptr stdout_lsp = mylog::SinkFactory::create<mylog::StdoutSink>();
//     // mylog::LogSink::ptr file_lsp = mylog::SinkFactory::create<mylog::FileSink>("./logfile/test.log");
//     // mylog::LogSink::ptr roll_lsp = mylog::SinkFactory::create<mylog::RollBySizeSink>("./logfile/roll-",1024*1024);
//     // stdout_lsp->log(str.c_str(),str.size());
//     // file_lsp->log(str.c_str(),str.size());
//     // size_t cursize = 0;
//     // size_t count = 0;
//     // while(cursize < 1024*1024*10)
//     // {
//     //     string tmp = str + std::to_string(count++);
//     //     roll_lsp->log(tmp.c_str(),tmp.size());
//     //     cursize += tmp.size();
//     // }
//     // cout<<mylog::LogLevel::toString(mylog::LogLevel::value::DEBUG)<<endl;
//     // cout<<mylog::LogLevel::toString(mylog::LogLevel::value::WARN)<<endl;
//     // cout<<mylog::LogLevel::toString(mylog::LogLevel::value::ERROR)<<endl;
//     // cout<<mylog::LogLevel::toString(mylog::LogLevel::value::FATAL)<<endl;
//     // cout<<mylog::LogLevel::toString(mylog::LogLevel::value::INFO)<<endl;
//     // cout<<mylog::LogLevel::toString(mylog::LogLevel::value::OFF)<<endl;
//     // cout<<mylog::LogLevel::toString(mylog::LogLevel::value::UNKNOWN)<<endl;

//     // cout<<mylog::util::Date::now()<<std::endl;
//     // string pathname = "./abc/bcd/a.txt";
//     // mylog::util::File::createDirectory( mylog::util::File::path(pathname));
//     return 0;
// }